#!/usr/bin/env zsh
set -o pipefail

function usage()
{
	echo "usage: cw [-f<file>kst<5-300>]"
	exit
}

###############################################################################
# Argument Handling
###############################################################################

while getopts :f:k:s:t: opt_flag; do
    case "${opt_flag}" in
        f)
            FILE="${OPTARG}"
            ;;
        k)
            API_KEY="${OPTARG}"
            ;;
        s)
            SYMBOL="${OPTARG}"
            ;;
        t)
            TIME="${OPTARG}"
            ;;
        \?)
            usage
            ;;
    esac
done

###############################################################################
# Defaults
###############################################################################

[ -z "$API_KEY" ] || [ -z "${SYMBOL}" ] || [[ "${SYMBOL}" =~ [^A-Za-z] ]] && usage
[[ ! "${FILE}" =~ "txt" ]] && FILE="${FILE}".txt
[ -z "${TIME}" ] || [ "${TIME}" -gt 300 ] || [ "${TIME}" -lt 5 ] && TIME=30

###############################################################################
# Globals
###############################################################################

declare -i downtick
declare -i uptick
downtick=0
uptick=0

###############################################################################
# Function Table
###############################################################################

function get_price()
{
    wget -U mozilla --no-cookies "https://api.nomics.com/v1/prices?key=$API_KEY" -qO- /dev/null \
        | json_pp | grep -A 2 -B 2 "\"${SYMBOL}\"" | tr -dc '[:digit:].'
}

function get_change()
{
    if [ -z "${a}" ]; then
    	a=$(get_price)
    else
    	a="${b}"
    fi

    sleep "${TIME}"
    
    time=$(date "+%Y-%m-%d | %H:%M:%S")
    b=$(get_price)
    diff_p=$(printf "%0f" "$(dc -e "8 k ${b} ${a} -sa la ${a} /sb lb 100 *p")")

    if [ ! "${a}" = "${b}" ]; then
    	[ $(bc -l <<< "${b}>${a}") = 1 ] && diff_s="+" || diff_s=""
        if [ "${diff_s}" = "+" ]; then
            ((uptick++))
            [ "${uptick}" -gt "${downtick}" ] && trend_s="+"
        else
            ((downtick++))
            [ "${downtick}" -gt "${uptick}" ] && trend_s="-"				
        fi

        [ "${trend_s}" = "+" ] && trend=$(dc -e "4 k ${downtick} ${uptick} /sa la 50 *sb 100 lb -p")
        [ "${trend_s}" = "-" ] && trend=$(dc -e "4 k ${uptick} ${downtick} /sa la 50 *sb 100 lb -p")
		
        case "${trend}" in
            0) 		 
                trend=100;;
            50.0000) 
                trend_s="";;
            *)  		 
                :;;
        esac
        [ -z "${FILE}" ] && \
            echo "[${SYMBOL}] ${time} | ${a}->${b}| ${diff_s}${diff_p}% | ${trend_s}${trend}%" \
              ||  echo "[${SYMBOL}] ${time} | ${a}->${b}| ${diff_s}${diff_p}% | ${trend_s}${trend}%" \
                      | tee -a "${FILE}"
    fi
}

function main()
{
    while true; do
        get_change 
    done
}

###############################################################################
# Main
###############################################################################

main "$@"
